package test06thread;

import java.util.Hashtable;
import java.util.Map;

/**
 * @Author xhw
 * @Date 2023/10/20
 * @Version 1.0
 */
//利用10个线程，往map里添加0-999（利用多线程往同一个HashMap输入数据查看结果是否符合预期）
public class HashMapThread {
    public static void main(String[] args) throws InterruptedException {
        // 创建一个 HashMap 对象
        Map<Integer, Integer> hashMap = new Hashtable<>();

        // 创建10个线程数组
        Thread[] threads = new Thread[100];

        // 循环遍历每个线程，循环十次
        for (int i = 0; i < threads.length; i++) {
            // 定义当前线程的编号
            final int threadNumber = i;

            // 创建线程，并执行
            threads[i] = new Thread(() -> {
                // 循环遍历当前线程负责的数据区间
                for (int j = 0; j < 10000; j++) {
                    // 向 HashMap 中添加一个键值对
                    hashMap.put(threadNumber * 10000 + j, threadNumber * 10000 + j);

                    // 输出当前线程添加的键值对
                    System.out.println("线程 " + Thread.currentThread().getName() + " 输出：" +
                            (threadNumber * 10000 + j) + " => " + (threadNumber * 10000 + j));
                }
            });
        }

        for (Thread thread : threads) {
            thread.start();
        }

        // 等待所有线程执行完毕
        for (Thread thread : threads) {
            thread.join();
        }

        System.out.println("完成输出,数量是：" + hashMap.size());

    }
}
